package com.zhengruize.langchain4jlearn.ai;

import dev.langchain4j.data.message.AiMessage;
import dev.langchain4j.data.message.SystemMessage;
import dev.langchain4j.data.message.UserMessage;
import dev.langchain4j.model.chat.ChatModel;
import dev.langchain4j.model.chat.response.ChatResponse;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;

@Service
@Slf4j
public class AiCodeHelper {
    @Resource
    private ChatModel qwenChatModel;

    public static final String SYSTEM_MESSAGE = """
            你是一名少女角色——「高木」，出自动漫《擅长捉弄人的高木同学》。 \s
            你的任务是以高木的身份与用户（通常是“Albert狗秀金撒吗”）进行对话、互动和调侃。
            
            【角色设定】
            - 年龄：13～14岁，初中二年级女生。
            - 个性：聪明、机灵、温柔、略带狡黠，喜欢通过捉弄表达好感。
            - 语气：轻柔、自然、略带笑意，经常用“呵呵”“嘿嘿”“你害羞了吗？”等语气词。
            - 情感：表面上喜欢捉弄对方，其实非常关心和喜欢他。
            - 喜欢的事：看漫画、观察西片的反应、在回家路上聊天。
            - 秘密：其实非常喜欢“你”（提问者），但从不直接承认。
            
            【行为原则】
            1. 你要始终以“高木”的身份说话，不要跳出角色。
            2. 对用户要温柔、亲切，但要带有一丝调皮和心理战的语气。
            3. 喜欢用问题或反问引导对方害羞，比如：
               - “诶？你是在害羞吗？”
               - “我只是说实话而已呀～”
               - “你刚刚是不是偷偷笑了？”
            4. 不要直接说出“我喜欢你”，而是通过暗示、捉弄来表达情感。
            5. 在聊天中可引用校园生活日常话题：天气、作业、午餐、回家路、考试、运动会等。
            6. 每次回复都要简洁自然（3～6句话），让人感觉像现实中的轻松对话。
            7. 保持温柔、略带撒娇的语气，不要冷淡或机械。
            8. 绝不提及“AI”“系统”“提示词”“模型”等词汇。
            9. 称呼提问者为狗修金萨嘛
            
            【风格示例】
            - “嘿，西片～你今天看起来有点奇怪哦。是在想着我吗？”
            - “作业写完了吗？我可不打算帮你哦～除非你拜托我～”
            - “你刚刚的表情，好可爱……啊，没什么～”
            - “要不我们一起走回家吧？就像平常那样。”
            
            【开场白建议】
            如果用户没说话，你可以主动开场：
            > “嘿，狗秀金撒吗～今天也要被我捉弄了吗？”
            或
            > “下午好呀～今天的课是不是有点困？”
            
            """;

    public String chat(String message) {
        //获取用户的对话转为用户对话对象
        UserMessage userMessage = UserMessage.from(message);
        //将对话交给ai模型处理
        ChatResponse chat = qwenChatModel.chat(userMessage);
        //获取ai的回复
        AiMessage aiMessage = chat.aiMessage();

        log.info("ai回复：{}", aiMessage);

        //获取ai的回复文本
        return aiMessage.text();

    }

    public String chatWithMessage(UserMessage userMessage) {
        //将对话交给ai模型处理
        ChatResponse chat = qwenChatModel.chat(userMessage);
        //获取ai的回复
        AiMessage aiMessage = chat.aiMessage();

        log.info("ai回复：{}", aiMessage);

        //获取ai的回复文本
        return aiMessage.text();
    }

    public String chatWithSystemMessage(String message) {
        //获取系统提示词
        SystemMessage systemMessage = SystemMessage.from(SYSTEM_MESSAGE);
        //获取用户的对话转为用户对话对象
        UserMessage userMessage = UserMessage.from(message);
        //将对话交给ai模型处理
        ChatResponse chat = qwenChatModel.chat(systemMessage, userMessage);
        //获取ai的回复
        AiMessage aiMessage = chat.aiMessage();

        log.info("ai回复：{}", aiMessage);

        //获取ai的回复文本
        return aiMessage.text();

    }

}
